package org.spring.blog.service;

import org.spring.blog.pojo.Article;
import org.spring.blog.response.ResponseResult;

public interface IArticleService {


    /**
     * 置顶文章
     *
     * @param _id 文章id
     * @return 自定义返回对象
     */
    ResponseResult topArticle(String _id);

    /**
     * 获取相关推荐文章的接口
     * 通过文章中的 标签 来给用户推荐文章
     * 相关的文章但不要一样， 安卓不要在推荐安卓
     * 可以推荐一下 linux 这样相关的 操作系统
     * <p>
     * 如果没有相关文章 则获取最新的文章
     *
     * @param _articleId 文章id
     * @param _size      数量
     * @return 自定义返回对象
     */
    ResponseResult listRecommendArticle(String _articleId, int _size);

    /**
     * 根据标签获取文章列表
     *
     * @param _page  页码
     * @param _size  页面大小
     * @param _label 标签
     * @return 自定义返回对象
     */
    ResponseResult listArticleByLabel(int _page, int _size, String _label);

    /**
     * 查询标签云
     *
     * @param _size 数量
     * @return 自定义返回对象
     */
    ResponseResult listLabels(int _size);

    /**
     * 获取文章数量
     *
     * @return 自定义返回对象
     */
    ResponseResult getArticleCount();

    /**
     * 查询文章
     * 需要返回数据库的文章内容
     *
     * @param _id 文章id
     * @return 自定义返回对象
     */
    ResponseResult queryByIdForAdmin(String _id);

    interface constant {
        int title_max_length = 128;
        int summary_max_length = 256;

        int text_type = 0;
        int markdown_type = 1;

        String db_draft_state_article = "2";
        String db_top_state_article = "3";

        String db_type_text = "0";
        String db_type_markdown = "1";

        int list_default_page_num = 1;
        int list_min_page_size = 5;
        String redis_article_cache_key = "redis_article_cache_key";
        String redis_article_view_count_cache_key = "redis_article_view_count_cache_key";
        String redis_list_article_first_page_cache = "redis_list_article_first_page_cache";
    }

    /**
     * 增加文章
     *
     * @param _article 文章对象
     * @return 自定义返回对象
     */
    ResponseResult insert(Article _article);

    /**
     * 列表获取文章
     *
     * @param _page       页码
     * @param _size       页面大小
     * @param _keyword    关键词
     * @param _categoryId 分类id
     * @param _state      删除 | 草稿 | 正常发布 | 置顶
     * @return 自定义返回对象
     */
    ResponseResult list(int _page, int _size, String _keyword, String _categoryId, String _state);

    /**
     * 查询文章
     *
     * @param _id 文章id
     * @return 自定义返回对象
     */
    ResponseResult queryById(String _id);

    /**
     * 更新文章
     *
     * @param _id      文章id
     * @param _article 文章对象
     * @return 自定义返回对象
     */
    ResponseResult update(String _id, Article _article);

    /**
     * 删除文章
     *
     * @param _id id
     * @return 自定义返回对象
     */
    ResponseResult delete(String _id);

    /**
     * 标记删除
     *
     * @param _id 文章id
     * @return 自定义返回对象
     */
    ResponseResult deleteArticleByState(String _id);

}
